home *** CD-ROM | disk | FTP | other *** search
- # include "Shell.h"
-
- extern Boolean gDoneFlag;
- extern Rect gDeskRect;
- extern MenuHandle gShellMenuHandles[];
- extern long gClickTime;
-
- /*-------------------------------------------------------------------------
- DoEvent() Standard Event Handler...
- -------------------------------------------------------------------------*/
-
- DoEvent(EventRecord *Event)
- {
- GrafPtr oldport;
-
- switch(Event->what)
- {
- case activateEvt:
- AppActivate((WindowPtr)Event->message, Event->modifiers & activeFlag);
- break;
-
- case updateEvt:
- GetPort(&oldport);
- SetPort((WindowPtr)Event->message);
- BeginUpdate((WindowPtr)Event->message);
-
- AppUpdate(Event);
-
- EndUpdate((WindowPtr)Event->message);
- SetPort(oldport);
- break;
-
- case mouseDown:
- DoMouse(Event);
- gClickTime = Event->when;
- break;
-
- case keyDown:
- DoKey(Event);
- break;
-
- case osEvt:
- DoOS(Event);
- break;
-
- case nullEvent:
- AppIdle(Event);
- break;
- }
- }
-
-
- /*------------------------------------------------------------------------
- DoMouse() Handles mousedown events...
- -------------------------------------------------------------------------*/
-
- DoMouse(EventRecord *eventptr)
- {
- WindowPtr whichWindptr;
- Point thePt;
- long mstuff;
- short part;
- Boolean doubleClick = false;
-
-
- if((eventptr->when - gClickTime) <= GetDblTime())
- {
- doubleClick = true;
- }
- thePt = eventptr->where;
- part = FindWindow(thePt, &whichWindptr);
- switch(part)
- {
- case inDesk:
- break;
-
- case inMenuBar:
- AppAdjustMenus();
- mstuff = MenuSelect(thePt);
- DoMenus(mstuff);
- break;
-
- case inSysWindow:
- SystemClick(eventptr, whichWindptr);
- break;
-
- case inContent:
- if(whichWindptr != FrontWindow())
- SelectWindow(whichWindptr);
- else
- {
- SetPort(whichWindptr);
- GlobalToLocal(&thePt);
- AppClick(thePt, whichWindptr, doubleClick);
- }
- break;
-
- case inDrag:
- DragWindow(whichWindptr, thePt, &gDeskRect);
- break;
-
- case inGrow:
- AppGrowWindow(whichWindptr, thePt, &gDeskRect);
- break;
-
- case inGoAway:
- if(TrackGoAway(whichWindptr, thePt))
- {
- AppClose();
- }
- break;
-
- case inZoomIn:
- case inZoomOut:
- if(TrackBox(whichWindptr, thePt, part))
- AppZoomWindow(whichWindptr, part);
- break;
- }
- }
-
-
- /*-----------------------------------------------------------------------
- DoKey() Handles keypresses...
- ------------------------------------------------------------------------*/
-
- DoKey(EventRecord *eventptr)
- {
- char key;
-
- key = (char)(eventptr->message);
- if(eventptr->modifiers & cmdKey)
- {
- long rslt;
-
- AppAdjustMenus();
- rslt = DoMenus(MenuKey(key));
- if(HiWord(rslt))
- return;
- }
- }
-
- /*-----------------------------------------------------------------------
- DoOS() Handles suspend and resume events, ignores mouse moved events
- ------------------------------------------------------------------------*/
-
- DoOS(EventRecord *eventPtr)
- {
- WindowPtr wind;
-
- /* Get the high byte of the message. Inside Mac VI says it's the low byte, but
- then goes on to say bits 24-31. Must be a typo... */
- switch ((eventPtr->message >> 24) & 0x0FF) /* the logical AND is a safety measure,
- to kill any sign bits shifted in */
- {
- case suspendResumeMessage:
- /* Suspend/resume is also an activate/deactivate. */
- AppActivate(FrontWindow(), eventPtr->message & resumeFlag);
- break;
-
- case mouseMovedMessage:
- break;
- }
- }
-
-
- /*-----------------------------------------------------------------------
- DoMenus() Handles a menu selection...
- ------------------------------------------------------------------------*/
-
- DoMenus(long mstuff)
- {
- short id, item;
-
- if(HiWord(mstuff) == 0)
- return;
-
- id = HiWord(mstuff);
- item = LoWord(mstuff);
- switch(id)
- {
- case kAppleMenuID:
- DoApple(item);
- break;
-
- case kFileMenuID:
- DoFile(item);
- break;
-
- case kEditMenuID:
- DoEdit(item);
- break;
-
- default:
- AppMenu(id, item);
- break;
- }
- HiliteMenu(0);
- }
-
- /*-----------------------------------------------------------------------
- DoApple() Handles apple menu...
- ------------------------------------------------------------------------*/
-
- DoApple(short item)
- {
- Str255 name;
-
- switch(item)
- {
- case iAbout:
- Alert(kAboutAlertID, nil);
- break;
-
- default:
- GetItem(gShellMenuHandles[kAppleMenu], item, name);
- OpenDeskAcc(name);
- }
- }
-
- /*-----------------------------------------------------------------------
- DoFile() Handles File menu...
- ------------------------------------------------------------------------*/
-
- DoFile(short item)
- {
- switch(item)
- {
- case iOpen: /* Open... */
- AppOpen();
- break;
-
- case iClose: /* Close... */
- AppClose();
- break;
-
- case iSave: /* Save... */
- AppSave();
- break;
-
- case iSaveAs: /* Save As... */
- AppSaveAs();
- break;
-
- case iPageSetup: /* Page Setup... */
- AppPageSetup();
- break;
-
- case iPrint: /* Print... */
- AppPrint();
- break;
-
- case iQuit: /* Quit */
- gDoneFlag = AppQuit();
- break;
- }
- }
-
- /*-----------------------------------------------------------------------
- DoEdit() Handles Edit menu...
- ------------------------------------------------------------------------*/
-
- DoEdit(short item)
- {
- /* First call SystemEdit to let a DA do editing, if one is frontmost. We
- pass it the item - 1 since the constants for the edit commands are zero-based */
- if(SystemEdit(item - 1) == false)
- {
- /* The command is for the app since SystemEdit didn't handle it. */
- switch(item)
- {
- case iUndo:
- AppUndo();
- break;
-
- case iCut:
- AppCut();
- break;
-
- case iCopy:
- AppCopy();
- break;
-
- case iPaste:
- AppPaste();
- break;
-
- case iClear:
- AppClear();
- break;
- }
- }
- }
-
-
-
- /*---------------------------------
- BailOut() Clean up and split...
- ----------------------------------- */
-
- void BailOut(void)
- {
- AppCleanUp();
- ExitToShell();
- }
-